package com.example.fastjson.config;

import com.alibaba.fastjson2.support.spring6.data.redis.GenericFastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
public class RedisConfig {
    // 在 Spring Data Redis 中集成 Fastjson2
    // 配置参考 FastJson2 在 Github上 的文档 https://github.com/alibaba/fastjson2/blob/main/docs/spring_support_cn.md

    // 在Fastjson2中，同样可以使用 GenericFastJsonRedisSerializer 或 FastJsonRedisSerializer 为 Spring Data Redis 提供更好的性能体验。
    // 使用 GenericFastJsonRedisSerializer 作为 RedisTemplate 的 RedisSerializer 来提升JSON序列化和反序列化速度。
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();
        // 设置默认的Serialize，包含 keySerializer & valueSerializer
        redisTemplate.setDefaultSerializer(fastJsonRedisSerializer);

        // redisTemplate.setKeySerializer(fastJsonRedisSerializer);//单独设置keySerializer
        // redisTemplate.setValueSerializer(fastJsonRedisSerializer);//单独设置valueSerializer
        return redisTemplate;
    }

}
